// 版权所有2016 Go作者。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// 包nettrace包含内部钩子，用于跟踪网络包中的活动。此包纯粹是内部的，供
// net/http/httptrace包使用，并且没有向最终
// 用户公开的稳定API。
package nettrace

// TraceKey是一个上下文。上下文值键。其关联值应为
// 为*Trace结构。
type TraceKey struct{}

// LookupIPAltResolverKey是一个上下文。测试用于
// 指定备用解析程序函数的上下文值键。
// 不向外部用户公开。（但请参见问题12503）
// 该值的类型应与lookupIP相同：
// func lookupIP（ctx context.context，host string）（[]IPAddr，error）
type LookupIPAltResolverKey struct{}

// Trace包含一组用于跟踪网络包中事件的钩子。任何特定挂钩可能为零。
type Trace struct {
	// DNSStart在开始之前使用DNS查找的主机名调用
	// 。
	DNSStart func(name string)

	// DNSDone在DNS查找完成（或失败）后调用。
	// 合并参数为singleflight是否执行重复数据消除
	// 调用。addr的类型为net.IPAddr，但由于循环依赖的原因，实际上不能为
	// 类型。
	DNSDone func(netIPs []interface{}, coalesced bool, err error)

	// 在拨号之前调用ConnectStart，不包括在DNS查找期间使用
	// 进行的拨号。在DualStack（快乐眼球）
	// 拨号的情况下，可以从多个
	// goroutines调用多次。
	ConnectStart func(network, addr string)

	// 在带有结果的拨号后调用ConnectStart，不包括在DNS查找期间进行的
	// 拨号。它也可以称为多次
	// 次，如ConnectStart。
	ConnectDone func(network, addr string, err error)
}
